@file:Suppress("unused")

package com.hjh.tool.extension

import android.content.Context
import android.content.res.Resources
import android.util.TypedValue
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import java.util.Date

/**
 * @author： hjh
 * @createDate： 2024/11/29 14:28
 * @description：
 * @qq： 3472903821
 * @version: 1.0
 */

fun Int.pxToDp(): Int {
    return TypedValue.applyDimension(
        TypedValue.COMPLEX_UNIT_DIP,
        this.toFloat(),
        Resources.getSystem().displayMetrics
    ).toInt()
}

fun Int.dpToPx(): Int {
    return (this * Resources.getSystem().displayMetrics.density).toInt()
}

fun Int.strRes(context: Context): String {
    return context.getString(this)
}

fun Int.intRes(context: Context): Int {
    return context.resources.getInteger(this)
}

fun Int.boolRes(context: Context): Boolean {
    return context.resources.getBoolean(this)
}

fun Int.toChinese(): String {
    val n = this
    if (n < 0 || n > 9999) throw IllegalArgumentException("输入数字需在 0-9999 之间")
    if (n == 0) return "零"

    val digits = listOf(n / 1000, (n % 1000) / 100, (n % 100) / 10, n % 10)
    val units = listOf("千", "百", "十", "")
    val chineseDigits = arrayOf("零", "一", "二", "三", "四", "五", "六", "七", "八", "九")

    val result = StringBuilder()
    var lastIsZero = false // 标记上一位是否是零
    val firstNonZeroIndex = digits.indexOfFirst { it > 0 } // 第一个非零位的位置

    for (i in digits.indices) {
        val d = digits[i]
        if (d > 0) {
            // 添加“零”的逻辑：当当前非零且之前有零，且已存在非零数字时
            if (lastIsZero && result.isNotEmpty()) result.append("零")

            // 处理十位的“一”省略逻辑（如“十”而非“一十”）
            if (i == 2 && d == 1 && i == firstNonZeroIndex) { // 十位是第一个非零位且为1
                result.append(units[i])
            } else {
                result.append(chineseDigits[d]).append(units[i])
            }
            lastIsZero = false
        } else {
            lastIsZero = true
        }
    }

    // 处理全零后缀（如 1000 → 一千，而非“一千零零零”）
    return result.toString()
}

/**
 * 解析xml布局
 *
 * @param parent 父布局
 * @param attachToRoot 是否依附到父布局
 */
fun Int.inflate(parent: ViewGroup, attachToRoot: Boolean = false): View {
    return LayoutInflater.from(parent.context).inflate(this, parent, attachToRoot)
}

fun Long.toDate(): Date {
    return Date(this)
}

fun Float.dpToPx(): Int {
    val scale = Resources.getSystem().displayMetrics.density
    return (this * scale + 0.5f).toInt()
}

fun Float.pxToDp(): Int {
    val scale = Resources.getSystem().displayMetrics.density
    return (this / scale + 0.5f).toInt()
}